# locust777


//#include<stdio.h>
//#include<windows.h>
//int main()
//{
//	//int b = 0;
//	//int a = 10;
//	//int* p = &a;
//	//*p = 20;
//	//NULL -> 0
//
//	//int* p2 = NULL;
//	//*p2 = 100;//err
//
//	//printf("%d\n",*p2); err
//
//	int * p3 = NULL;
//	if(p3 != NULL)
//	{
//	*p3 = 100; //ok
//	}
//
//system("pause");
//return 0;
//}



//
////1
//#include<windows.h>
//#include<stdio.h>
//
//int* test()
//{
//int a = 10;
//return &a;
//}
//
//int main()
//{
//	int*p = test();
//	if(p != NULL)
//	{
//	printf("%d\n",*p); //10
//	}
//
//system("pause");
//return 0;
//}


////2
//#include<windows.h>
//#include<stdio.h>
//
//int* test()
//{
//int a = 10;
//return &a;
//}
//
//int main()
//{
//	int*p = test();
//	printf("haha\n");  //hehe
//	printf("abcdef\n");//abcdef
//	
//	if(p != NULL) 
//	{
//	printf("%d\n",*p);  //-2 被影响到了  //后期思考
//	}
//
//system("pause");
//return 0;
//}



//      如何规避野指针

//1.指针初始化
//2.小心指针越界
//3.指针指向空间释放即使置NULL
//4.避免返回局部变量的地址
//5.指针使用之前检查有效性



//指针运算

//1.指针+=整数
//2.指针-指针
//3.指针的关系运算


////1.指针+=整数
//#define N_VALUES 5                              低 ------------------------------------>   高
//float values[N_VALUES];                         valuse   
//float *vp;                                      0   1  2  3  4 | 5 
////1.指针+=整数:指针的关系运算                   vp 
//for(vp = &values[0];vp < &values[N_VALUES];)
//{
//*vp++ = 0; 
//}

//*vp++ = 0;

//*vp = 0;
//vp++;


//
//#include<stdio.h>
//#include<windows.h>
//int main()
//{
//	int arr[10] = {0};
//	int i = 0;
//	int sz = sizeof(arr)/sizeof(arr[0]); //40 / 4 = 10
//
//	//数组下标的写法
//	//for(i = 0;i < sz;i++)
//	//{
//	//    arr[i] = 1;
//	//}
//
//	//int* p = arr;
//	//for(i = 0;i < sz;i++)
//	//{
//	//*p = i;
//	//p++;
//	////*p++ = 1;  //0 1 2 3 4 5 6 7 8 9
//	//}
//
//	//int* p = arr;
//	//for(i = 0;i < sz;i++)
//	//{
//	//    *(p + 1) = i;  //0 9 0 0 0 0 0  //出现错误
//	//}
//
//	for(i = 0;i < sz;i++)
//	{
//		printf("%d ",arr[i]); //需要一个一个输出
//	}
//system("pause");
//return 0;
//}



//如何避免野指针
//int main()
//{
//int* p;
////p没有初始化，就意味着没有明确的指向
////一个局部变量不初始化，放的是随机变量：0xcccccc
////
////
//*p = 10; //非法访问空间了，这里的p就是野指针
////
//
//return 0;
//}


//#include<stdio.h>
//#include<windows.h>
//int main()
//{
//	int arr[10] = {0};
//	int i = 0;
//	int sz = sizeof(arr)/sizeof(arr[0]); //40 / 4 = 10
//
//	//0 1 2 3 4 5 6 7 8 9
//	//*p + + +
//	int* p = arr; //&arr[0]
//	for(i = 0;i < sz;i++)
//	{
//	*p = i;
//	p++;
//	//*p++ = 1;  /1 1 1 1 1 1 
//	}
//
//	for(i = 0;i < sz;i++)
//	{
//		printf("%d ",arr[i]); //需要一个一个输出
//	}
//system("pause");
//return 0;
//}


//指针，原理
//
//int* test()
//{
//	int a = 10;        //10 --> 0x0012ff40
//	return &a;
//}
//
//int main()
//{
//    int* p = test(); // 0x0012ff40; p
//	// |
//
//	return 0;
//}



////指针-指针得到的指针和指针之间元素的个数
////注
////1.不是所有的指针都能相减
////2.指向同一块空间的2个指针才能相减！
////
//
//
//#include<stdio.h>
//#include<windows.h>
//int main()
//{
//	//相同空间指针
//	//int arr[10] = {0};
//	//printf("%d\n",&arr[9]-&arr[0]);  //9
//
//	////不同空间指针
//	//int arr[10] = {0};
//	//char ch[5] = {0};
//	//printf("%d\n",&ch[0] - &arr[5]); //err
//
//
//system("pause");
//return 0;
//}
